home *** CD-ROM | disk | FTP | other *** search
/ Hottest 6 / Hottest 6 (1996)(PDSoft)[!].iso / pdsoft / demo_library / 4518.lha / radarratrun / RadarRatRun.AMOS / RadarRatRun.amosSourceCode < prev    next >
AMOS Source Code  |  1995-07-04  |  29KB  |  996 lines

  1. ' ====================================================================   
  2. '          Radar Rat Run By Stephen W Williams ï¿½ 18/04/1995  
  3. '                      stephenwilli@delphi.com 
  4. '                      Music by Stuart matthews
  5. ' ====================================================================   
  6. ' ------------------------ Dimension Variables ----------------------- 
  7. Dim HS$(16,7),LEVEL$(2)
  8. Dim BONUS(2),CHEESE(2),DIF(2),EATEN(2),LEVEL(2),LIVES(2)
  9. Dim MAZE(2),OLD_SCORE(2),RATS(2),SCORE(2),TAKEN(2)
  10. Dim BX(9),BY(9),CHMX(2,14),CHMY(2,14)
  11. Dim D(9),S1(30),T(9),TC(2),TS(2),TM(2),XL(2)
  12. ' -------------------------- Global Variables ------------------------ 
  13. Global HS$(),LEVEL$()
  14. Global BONUS(),CHEESE(),DIF(),EATEN(),LEVEL(),LIVES()
  15. Global MAZE(),OLD_SCORE(),RATS(),SCORE(),TAKEN()
  16. Global BX(),BY(),CHMX(),CHMY()
  17. Global D(),S1(),T(),TC(),TS(),TM(),XL()
  18. Global SCX,SC0Y,SC1Y,SC4Y
  19. Global HISCORE,SPEED,QUIT,TIME,DELAY
  20. Global F0,F1,F2,F3,F4,F5,F6,PLY,PN,ST,W,HSP,MZ,SB,P
  21. ' ----------------------- Screen X Y Positions ----------------------- 
  22. SCX=112 : SC0Y=311 : SC1Y=453 : SC4Y=530
  23. ' -------------------------- Setup Variables ------------------------- 
  24. COUNTER=1 : DELAY=1
  25. SPEED=4 : PN=1 : PLY=1 : W=31 : SB=100
  26. For L=1 To 2
  27.    CHEESE(L)=6 : DIF(L)=4 : MAZE(L)=1 : LIVES(L)=3 : LEVEL(L)=1 : RATS(L)=1
  28.    BONUS(L)=1
  29. Next L
  30. ' ------------------------- Start -----------------------------------
  31.  
  32. Proc _MUSIC
  33. Proc _OPEN_SCREENS
  34. Proc SETUP_FONTS
  35. Track Play 3
  36. Proc VERSION
  37. Proc INFO_DATA[1,0]
  38. Proc _SHOW_SCREENS
  39. Proc LIVES
  40. Proc HS_LOAD
  41. PN=2 : Proc SCORE_DISPLAY
  42. PN=1 : Proc SCORE_DISPLAY
  43. Proc HI_SCORE
  44. Proc TITLES
  45. Proc INFO_DATA[4,1]
  46. Proc OPTIONS
  47. Proc MAZE_LOAD[MAZE(PN)]
  48. If PLY=2 Then PN=2
  49. Proc SETUP_CHEESE
  50. PN=1 : SETUP_CHEESE
  51. RESTART:
  52. Proc RESET_TIME
  53. Proc STATUS
  54. Proc HI_SCORE
  55. Proc SETUP_START
  56. Proc LIVES
  57. Proc _START
  58. Timer=0
  59. '---------------- Main Loop -----------------------
  60. Priority Reverse On : Track Play 3
  61. Bob Clear 
  62. Repeat 
  63.    Screen 2 : Bob Clear : Inc COUNTER
  64.    If DELAY<9 and TIME<50 Then Inc DELAY
  65.    For K=25 To 30 : Inc S1(K) : If S1(K)>70 Then Bob Off K : S1(K)=0
  66.    Next K
  67.    For L=1 To DIF(PN)
  68.       If Fire(1) and DELAY>8 Then DELAY=0 : Inc TIME : Proc WIND
  69.       If L>1 Then Gosub MFOLLOW Else Proc JSTICK
  70.       If TIME>50 and L=1 Then M=-1 Else M=0
  71.       On T(L) Gosub NMOVE1,NMOVE2,NMOVE3,NMOVE4
  72.       On D(L) Gosub TURN1,TURN2,TURN3,TURN4
  73.       If Bob Col(L,25 To 35) and L>1 Then Proc HIT_RAT[L]
  74.       On D(L) Gosub MOVE1,MOVE2,MOVE3,MOVE4
  75.       If L>1 Then FRAME1=4 : C=14 Else FRAME1=FRAME : C=13
  76.       Screen 1 : Bob(L+30),216+(BX(L)/15),11+(BY(L)/15),C
  77.       Screen 2 : Bob L,BX(L),BY(L),D(L)+FRAME1
  78.       If Bob Col(1,2 To 24) Then Proc HIT_CHEESE
  79.       If D(1)=9 Then Bob 1,BX(1),BY(1),9 : Track Stop : Sam Play 3 : EX=1 : Exit 
  80.    Next L : Bob Draw 
  81.    K$=Inkey$ : If K$<>"" Then Proc KEYS
  82.    Screen Copy 2,BX(1)-64,BY(1)-66,BX(1)+64,BY(1)+65 To 0,106,7
  83.    Screen Swap 0
  84.    If COUNTER>50 and TIME<57 : COUNTER=0 : Inc TIME
  85.       Inc SCORE(PN) : Proc SCORE_DISPLAY : TIME_DISPLAY
  86.    End If 
  87. Until EX=1 or EATEN(PN)=CHEESE(PN) : DUMMY=Free
  88. Screen Copy 2,BX(1)-64,BY(1)-66,BX(1)+64,BY(1)+65 To 0,106,7 : Screen Swap 0
  89. Screen Copy 2,BX(1)-64,BY(1)-66,BX(1)+64,BY(1)+65 To 0,106,7 : Screen Swap 0
  90. Bob Clear : Track Stop 
  91. Proc EXTRA_LIVE : TAKEN(PN)=TAKEN(PN)+Timer
  92. Screen Close 2
  93. '-------------------- End of main loop ----------------- 
  94. '-------------------- Reset -------------------- 
  95. DELAY=0 : HI_SCORE
  96. '-------------------- Game over ---------------- 
  97. If LIVES(PN)=0 and EATEN(PN)<CHEESE(PN) Then LIVES(PN)=-2 : EX=0 : TC(PN)=TC(PN)+EATEN(PN) : HI_SCORE : Proc THEEND : If ST<PLY Then Goto RESTART
  98. If ST=PLY Then RESET : End 
  99. '-------------------- Got by Rat ----------------------
  100. If EX=1
  101.    TIME=0 : BONUS(PN)=1 : DELAY=0 : SB=100 : Dec LIVES(PN) : Inc PN
  102.    If PN>2 : PN=1 : End If 
  103.    If LIVES(PN)=-2 : Dec PN : End If 
  104.    If PN<1 : PN=2 : End If 
  105.    If PLY=1 : PN=1 : End If 
  106.    EX=0 : Proc RESET_TIME : Proc MAZE_LOAD[MAZE(PN)] : Goto RESTART
  107. End If 
  108. '-------------------- Eaten all Cheese ----------------
  109. Add TC(PN),EATEN(PN)
  110. Repeat 
  111.    Inc TIME : SCORE(PN)=SCORE(PN)+10
  112.    Proc TIME_DISPLAY : SCORE_DISPLAY : HI_SCORE
  113.    Wait Vbl 
  114.    Sam Play 9
  115.    Wait 6
  116. Until TIME=>57
  117. TIME=0 : Add CHEESE(PN),2 : EATEN(PN)=0 : BONUS(PN)=1 : SB=100
  118. Inc LEVEL(PN) : Proc HI_SCORE : SCORE_DISPLAY : EXTRA_LIVE : LIVES
  119. Proc MAKE_HARDER : STATUS : SETUP_CHEESE
  120. Goto RESTART
  121. '---------------- Move if clear ahead ------------------------ 
  122. MOVE1:
  123. If Zone(X Bob(L),Y Bob(L)-SPEED) Then Return 
  124. Add BY(L),-(SPEED+M) : Return 
  125. MOVE2:
  126. If Zone(X Bob(L)+SPEED,Y Bob(L)) Then Return 
  127. Add BX(L),(SPEED+M) : Return 
  128. MOVE3:
  129. If Zone(X Bob(L),Y Bob(L)+SPEED) Then Return 
  130. Add BY(L),(SPEED+M) : Return 
  131. MOVE4:
  132. If Zone(X Bob(L)-SPEED,Y Bob(L)) Then Return 
  133. Add BX(L),-(SPEED+M) : Return 
  134. '=============== Turn if way is not blocked ============ 
  135. NMOVE1:
  136. If Zone(X Bob(L),Y Bob(L)-SPEED*2) Then Return 
  137. D(L)=1 : Return 
  138. NMOVE2:
  139. If Zone(X Bob(L)+SPEED*2,Y Bob(L)) Then Return 
  140. D(L)=2 : Return 
  141. NMOVE3:
  142. If Zone(X Bob(L),Y Bob(L)+SPEED*2) Then Return 
  143. D(L)=3 : Return 
  144. NMOVE4:
  145. If Zone(X Bob(L)-SPEED*2,Y Bob(L)) Then Return 
  146. D(L)=4 : Return 
  147. '---------------- Pick turn direction if way is blocked ---------
  148. TURN1:
  149. If Zone(X Bob(L),Y Bob(L)-SPEED) Then Add BY(L),SPEED : Goto TURN_L_R
  150. Return 
  151. TURN2:
  152. If Zone(X Bob(L)+SPEED,Y Bob(L)) Then Add BX(L),-SPEED : Goto TURN_U_D
  153. Return 
  154. TURN3:
  155. If Zone(X Bob(L),Y Bob(L)+SPEED) Then Add BY(L),-SPEED : Goto TURN_L_R
  156. Return 
  157. TURN4:
  158. If Zone(X Bob(L)-SPEED,Y Bob(L)) Then Add BX(L),SPEED : Goto TURN_U_D
  159. Return 
  160. '--------------------- Pick direction -----------------
  161. TURN_L_R:
  162. S=Rnd(1) : If S=1 Then D(L)=2 Else D(L)=4
  163. Return 
  164. TURN_U_D:
  165. S=Rnd(1) : If S=1 Then D(L)=1 Else D(L)=3
  166. Return 
  167. MFOLLOW:
  168. '---------------- Follow Mouse ----------------  
  169. MY=Abs(BY(1)-BY(L)) : MX=Abs(BX(1)-BX(L)) : If MX>MY Then Goto MFOLLOW0
  170. If BY(1)<BY(L) Then T(L)=1 : Return 
  171. If BY(1)>BY(L) Then T(L)=3 : Return 
  172. Return 
  173. MFOLLOW0:
  174. If BX(1)<BX(L) Then T(L)=4 : Return 
  175. If BX(1)>BX(L) Then T(L)=2 : Return 
  176. Return 
  177. '--------------------------------------------------------- 
  178. ' ------------------- Procedures ------------------------- 
  179. Procedure SETUP_FONTS
  180.    Trap Reserve As Data 10,1000000000
  181.    If Exist("fonts") Then Assign "fonts:" To "fonts"
  182.    RERUN:
  183.    Get Fonts 
  184.    L=1
  185.    Do 
  186.       F$=Font$(L)
  187.       If F$="" Then Exit 
  188.       I=1 : NAME$=""
  189.       Do 
  190.          TM$=Mid$(F$,I,1)
  191.          If TM$=" " Then Exit 
  192.          NAME$=NAME$+TM$
  193.          Inc I
  194.       Loop 
  195.       Do 
  196.          TM$=Mid$(F$,I,1)
  197.          If TM$<>" " Then Exit 
  198.          Inc I
  199.       Loop 
  200.       TM$=Mid$(F$,I-1,3)
  201.       TM=Val(TM$)
  202.       If Left$(NAME$,3)="top" and TM=8 Then F0=L
  203.       If Left$(NAME$,3)="top" and TM=9 Then F1=L
  204.       If Left$(NAME$,3)="tim" and TM=11 Then F2=L
  205.       If Left$(NAME$,3)="tim" and TM=13 Then F3=L
  206.       If Left$(NAME$,3)="tim" and TM=15 Then F4=L
  207.       If Left$(NAME$,3)="tim" and TM=18 Then F5=L
  208.       If Left$(NAME$,3)="tim" and TM=24 Then F6=L
  209.       Inc L
  210.    Loop 
  211.    If F5=0 or F4=0 Then Assign "fonts:" To "sys:fonts" : Goto RERUN
  212. End Proc
  213. Procedure _OPEN_SCREENS
  214.    '----------------------------- Open Screens ---------------------
  215.    Default Palette 0,$FF,$FFF,$0,$F00,$F0,$F,$666,$444,$222,$8F,$FF0,$FF,$4F,$7F7,$F07
  216.    Load "Screens/Main.abk",6
  217.    Screen Open 0,320,145,16,Lowres : Screen Display 0,112,311,,
  218.    Double Buffer : Autoback 1 : Curs Off : Hide On : Cls 0
  219.    Bob Update Off : Unpack 6 : Erase 6
  220.    Load "Screens/Info.abk",6
  221.    Screen Open 1,320,80,16,Lowres : Screen Display 1,112,311,,
  222.    Curs Off : Unpack 6 : Erase 6
  223.    Load "Screens/Title.abk",6
  224.    Screen Open 3,144,944,16,Lowres : Screen Hide 
  225.    Curs Off : Unpack 6 : Erase 6
  226.    Load "Screens/HiScore.abk",6
  227.    Screen Open 4,640,221,16,Hires : Screen Display 4,122,311,,
  228.    Curs Off : Unpack 6 : Screen To Back : Erase 6
  229.    Load "Screens/Bobs.abk"
  230.    Load "screens/Samples.abk",5
  231. End Proc
  232. Procedure _SHOW_SCREENS
  233.    '---- Move Screens into view ----
  234.    For L=0 To 135
  235.       Add SC0Y,-2 : Add SC1Y,-2 : Add SC4Y,-2
  236.       Screen Display 0,SCX,SC0Y,,
  237.       Screen Display 1,SCX,SC1Y,,
  238.       Screen Display 4,SCX,SC4Y,,
  239.       Wait Vbl 
  240.    Next L
  241. End Proc
  242. Procedure _HIDE_SCREENS
  243.    For L=0 To 135
  244.       Add SC0Y,2 : Add SC1Y,2 : Add SC4Y,2
  245.       Screen Display 0,SCX,SC0Y,,
  246.       Screen Display 1,SCX,SC1Y,,
  247.       Screen Display 4,SCX,SC4Y,,
  248.       Wait Vbl 
  249.    Next L
  250. End Proc
  251. Procedure TITLES
  252.    '----------- Move title screen to the main screen ------------ 
  253.    For I=142 To 0 Step -1
  254.       Screen Copy 3,3,1,131,133-I To 0,106,6+I
  255.       Screen Swap 0 : Wait Vbl 
  256.    Next I
  257.    Proc INFO_DATA[2,1]
  258.    Screen Copy 3,3,1,131,133 To 0,106,6
  259.    '--------------- Scroll titles ----------------- 
  260.    S=0 : E=0 : D=0 : P=0
  261.    Repeat 
  262.       If S=0 : For L=0 To 100 : Wait 1
  263.             If Fire(1) and E<>1 : Proc INFO_DATA[3,0] : E=1 : End If 
  264.          Next L
  265.       End If 
  266.       Inc S
  267.       Screen Copy 3,3,26+S,131,135+S To 0,106,29
  268.       Screen Swap 0 : Wait Vbl 
  269.       If Inkey$=" " Then Proc INFO_DATA[10,1] : Wait Key : Proc INFO_DATA[2,1]
  270.       If Fire(1) and QUIT=0 Then QUIT=1 : Proc INFO_DATA[3,0]
  271.       If E=1 Then Exit 
  272.       If S>663 Then S=0
  273.    Until S=0 and QUIT=1
  274.    P=663
  275.    For S=0 To 145
  276.       If S>111 and D<20 Then Inc D
  277.       If D=0 Then Inc P
  278.       Screen Copy 3,3,27+P,131,136+P+D To 0,106,29-D
  279.       Screen Swap 0 : Wait Vbl 
  280.    Next S
  281. End Proc
  282. Procedure INFO_DATA[MES,_MODE]
  283.    Screen 1 : Gr Writing 0
  284.    If _MODE=1 Then Ink 3 : Box 8,21 To 114,69
  285.    If _MODE=0 Then Ink 0 : Box 8,21 To 114,69
  286.    Cls 8,13,26 To 110,65
  287.    On MES Gosub M1,M2,M3,M4,M5,M6,M7,M8,M9,M10
  288.    Read LINES
  289.    For L=1 To LINES
  290.       Read FONT : Set Font FONT
  291.       Read _INK,PX,PY,A$
  292.       Ink 0
  293.       Text PX,PY,A$
  294.       If Left$(A$,6)="Player" and PN=1 Then _INK=4
  295.       Ink _INK
  296.       Text PX-1,PY-1,A$
  297.    Next L
  298.    Pop Proc
  299.    M1: Restore MES1 : Return 
  300.    M2: Restore MES2 : Return 
  301.    M3: Restore MES3 : Return 
  302.    M4: Restore MES4 : Return 
  303.    M5: Restore MES5 : Return 
  304.    M6: Restore MES6 : Return 
  305.    M7: Restore MES7 : Return 
  306.    M8: Restore MES8 : Return 
  307.    M9: Restore MES9 : Return 
  308.    M10: Restore MES10 : Return 
  309.    MES1:
  310.    Data 2
  311.    Data F4,5,28,40,"Please Wait"
  312.    Data F4,5,21,55,"Loading Titles"
  313.    MES2:
  314.    Data 2
  315.    Data F5,10,19,40,"Press Fire"
  316.    Data F5,10,18,59,"for Options"
  317.    MES3:
  318.    Data 3
  319.    Data F3,5,28,37,"Please Wait"
  320.    Data F4,5,25,49,"Loading"
  321.    Data F4,5,41,61,"Options"
  322.    MES4:
  323.    Data 3
  324.    Data F3,11,19,37,"Use Mouse or"
  325.    Data F4,11,22,49,"Joystick to"
  326.    Data F4,11,25,61,"Select Options"
  327.    MES5:
  328.    Data 2
  329.    Data F5,1,16,41,"Player"+Str$(PN)
  330.    Data F5,3,16,61,"Press Fire"
  331.    MES6:
  332.    Data 2
  333.    Data F5,11,19,43,"Please Wait"
  334.    Data F4,11,15,56,"Loading Maze"+Str$(MAZE(PN))
  335.    MES7:
  336.    Data 3
  337.    Data F4,4,24,37,"Bonus= X 1"
  338.    Data F3,11,24,48,"Next"
  339.    Data F4,11,19,60,"Cheese= 100"
  340.    MES8:
  341.    Data 2
  342.    Data F4,4,19,40,"Game Over"
  343.    Data F3,4,15,52,"Play Again(Y/N)"
  344.    MES9:
  345.    Data 2
  346.    Data F5,10,19,40,"Press Fire"
  347.    Data F5,10,17,59,"To Continue"
  348.    MES10:
  349.    Data 2
  350.    Data F4,4,15,40,"Press Any Key "
  351.    Data F5,4,16,59,"To Continue"
  352. End Proc
  353. Procedure OPTIONS
  354.    Screen Close 3
  355.    DUMMY=Free
  356.    QUIT=0 : Screen 0
  357.    Reserve Zone 17 : Restore _ZONES
  358.    For L=1 To 17
  359.       Read A,B,C,D
  360.       Set Zone L,A,B To C,D
  361.    Next L
  362.    X Mouse=250 : Y Mouse=145 : Show On 
  363.    Repeat 
  364.       Wait 2
  365.       Proc STATUS : Screen 0
  366.       Limit Mouse X Hard(202),Y Hard(22) To X Hard(230),Y Hard(137)
  367.       If Key State(95) Then Proc RESET
  368.       If Jup(1) Then Y=Y Mouse : Y Mouse=Y-2
  369.       If Jdown(1) Then Y=Y Mouse : Y Mouse=Y+2
  370.       If Jright(1) Then X=X Mouse : X Mouse=X+2
  371.       If Jleft(1) Then X=X Mouse : X Mouse=X-2
  372.       MZ=Mouse Zone
  373.       If Mouse Key or Fire(1) : Wait 10
  374.          On MZ Proc SCR_U_D,SCR_U_D,SCR_L_R,SCR_L_R,SCR_POS,SCR_POS,CON_SPEED,CON_SPEED,CON_CHEESE,CON_CHEESE,CON_DIF,CON_DIF,CON_MAZE,CON_MAZE,CON_PLAYERS,CON_PLAYERS,CON_START
  375.       End If 
  376.    Until QUIT=1
  377.    _ZONES:
  378.    Data 202,22,213,26,202,28,213,33,218,22,223,33,224,22,230,33
  379.    Data 202,37,213,48,218,38,230,48,202,51,213,63,218,52,230,63
  380.    Data 202,67,213,78,218,67,230,78,202,82,213,93,218,82,230,93
  381.    Data 202,97,213,108,218,97,230,108,202,112,213,123,218,112,230,123
  382.    Data 202,127,230,137
  383. End Proc
  384. Procedure RESET
  385.    SCX=112 : SC0Y=40 : SC1Y=198 : SC4Y=238
  386.    Screen Display 0,SCX,SC0Y,,
  387.    Screen 0 : Limit Mouse X Hard(191),Y Hard(33) To X Hard(221),Y Hard(146)
  388.    Screen Display 1,SCX,SC1Y,,
  389.    Screen Display 4,SCX,SC4Y,,
  390. End Proc
  391. Procedure SCR_U_D
  392.    '---------- Move display up or down -------------- 
  393.    If MZ=2 Then Y Mouse=Y Mouse-1 : Inc SC0Y : Inc SC1Y : Inc SC4Y
  394.    If MZ=1 Then Y Mouse=Y Mouse+1 : Dec SC0Y : Dec SC1Y : Dec SC4Y
  395.    Screen Display 0,SCX,SC0Y,,
  396.    Screen Display 1,SCX,SC1Y,,
  397.    Screen Display 4,SCX,SC4Y,,
  398. End Proc
  399. Procedure SCR_L_R
  400.    MOVE=0 : Wait 10
  401.    If MZ=3 Then MOVE=MOVE-16 Else MOVE=MOVE+16
  402.    SCX=SCX+MOVE
  403.    X Mouse=X Mouse+MOVE
  404.    Screen Display 0,SCX,SC0Y,,
  405.    Screen Display 1,SCX,SC1Y,,
  406.    Screen Display 4,SCX,SC4Y,,
  407. End Proc
  408. Procedure SCR_POS
  409.    ' ------- Move Info Screen ----------------- 
  410.    If MZ=6 or P=1 Then Goto JUMP
  411.    If SC1Y<SC0Y Then Pop Proc
  412.    For L=0 To 75
  413.       Inc SC0Y : If SC1Y>SC0Y-73 Then SC1Y=SC1Y-1.4
  414.       Screen Display 0,SCX,SC0Y,,
  415.       Screen Display 1,SCX,SC1Y,,
  416.       Wait Vbl : P=0
  417.       Y Mouse=Y Mouse+1
  418.    Next L
  419.    Screen Display 0,SCX,SC4Y-142,,
  420.    Screen Display 1,SCX,SC4Y-219,,
  421.    Screen Display 4,SCX,SC4Y,,
  422.    Pop Proc
  423.    JUMP:
  424.    If SC1Y>SC0Y Then Pop Proc
  425.    For L=0 To 75
  426.       Dec SC0Y : If SC1Y<SC0Y+140 Then SC1Y=SC1Y+2
  427.       Screen Display 0,SCX,SC0Y,,
  428.       Screen Display 1,SCX,SC1Y,,
  429.       Wait Vbl : P=1
  430.       Limit Mouse X Hard(191),Y Hard(33) To X Hard(221),Y Hard(146)
  431.       Y Mouse=Y Mouse-1
  432.    Next L
  433.    Screen Display 0,SCX,SC4Y-219,,
  434.    Screen Display 1,SCX,SC4Y-77,,
  435.    Screen Display 4,SCX,SC4Y,,
  436. End Proc
  437. Procedure CON_SPEED
  438.    '------------ Speed -------------
  439.    If MZ=8 and SPEED>2 Then Dec SPEED
  440.    If MZ=7 and SPEED<5 Then Inc SPEED
  441.    A$=Str$(SPEED-1)
  442.    Ink 8 : Bar 186,54 To 198,64
  443.    Gr Writing 0 : Ink 0 : Text 189,63,A$
  444.    Screen 0 : Ink 2 : Text 188,62,A$
  445.    Proc STATUS
  446. End Proc
  447. Procedure CON_CHEESE
  448.    CHEESE=CHEESE(PN)
  449.    If MZ=9 and CHEESE<10 Then Add CHEESE,2
  450.    If MZ=10 and CHEESE>4 Then Add CHEESE,-2
  451.    A$=Str$(CHEESE)
  452.    SI=Len(A$)
  453.    A$="00"+Right$(A$,SI-1)
  454.    Ink 8 : Bar 186,69 To 198,79
  455.    Gr Writing 0 : Ink 0 : Text 188,78,Right$(A$,2)
  456.    Screen 0 : Ink 11 : Text 187,77,Right$(A$,2)
  457.    CHEESE(1)=CHEESE
  458.    CHEESE(2)=CHEESE
  459.    Proc STATUS
  460. End Proc
  461. Procedure CON_DIF
  462.    DIF=DIF(PN)
  463.    If MZ=11 and DIF<7 Then Inc DIF
  464.    If MZ=12 and DIF>4 Then Dec DIF
  465.    A$=Str$(DIF-1)
  466.    Ink 8 : Bar 186,84 To 198,94
  467.    Gr Writing 0 : Ink 0 : Text 189,93,A$
  468.    Screen 0 : Ink 4,8 : Text 188,92,A$
  469.    DIF(1)=DIF
  470.    DIF(2)=DIF
  471.    Proc STATUS
  472. End Proc
  473. Procedure CON_MAZE
  474.    MAZE=MAZE(PN)
  475.    If MZ=13 and MAZE<4 Then Inc MAZE
  476.    If MZ=14 and MAZE>1 Then Dec MAZE
  477.    A$=Str$(MAZE)
  478.    Ink 8 : Bar 186,99 To 198,109
  479.    Gr Writing 0 : Ink 0 : Text 189,108,A$
  480.    Screen 0 : Ink 5 : Text 188,107,A$
  481.    MAZE(1)=MAZE
  482.    MAZE(2)=MAZE
  483.    Proc STATUS
  484. End Proc
  485. Procedure CON_PLAYERS
  486.    If MZ=15 Then PLY=2
  487.    If MZ=16 Then PLY=1
  488.    A$=Str$(PLY)
  489.    Ink 8 : Bar 186,114 To 198,124
  490.    Gr Writing 0 : Ink 0 : Text 188,123,A$
  491.    Screen 0 : Ink 13,8 : Text 187,122,A$
  492.    Proc STATUS
  493. End Proc
  494. Procedure CON_START
  495.    QUIT=1 : Hide 
  496. End Proc
  497. Procedure STATUS
  498.    ' ------------------------ Status Display ---------------------------
  499.    Screen 1 : Gr Writing 1 : Set Font F2
  500.    ' -- Speed --
  501.    Ink 2,0
  502.    A$=Str$(SPEED-1)
  503.    Text 158,64,A$
  504.    '-- Number of Cheese to start / Remaining -- 
  505.    A$=Str$(CHEESE(PN)-EATEN(PN))
  506.    SI=Len(A$)
  507.    A$="00"+Right$(A$,SI-1)
  508.    Ink 11
  509.    Text 126,29,Right$(A$,2)
  510.    ' -- Number of Rats -- 
  511.    Ink 4
  512.    A$=Str$(DIF(PN)-1)
  513.    Text 190,29,A$
  514.    ' -- Maze Number --
  515.    Ink 5
  516.    A$=Str$(MAZE(PN))
  517.    Text 158,29,A$
  518.    ' -- What Level -- 
  519.    Ink 3
  520.    A$=Str$(LEVEL(PN))
  521.    SI=Len(A$)
  522.    A$="00"+Right$(A$,SI-1)
  523.    Screen 1 : Text 126,64,Right$(A$,2)
  524.    ' -- Number of players --
  525.    Ink 13
  526.    A$=Str$(PLY)
  527.    Screen 1 : Text 190,64,A$
  528. End Proc
  529. Procedure LIVES
  530.    '-------------- Display Lives left ----------
  531.    Screen 0
  532.    Gr Writing 1
  533.    LIVES$=Str$(LIVES(PN))
  534.    If PN=1 Then Ink 4,0 Else Ink 1,0
  535.    Set Font F5
  536.    Paste Bob 25,105,1
  537.    Text 48,124,"X"
  538.    Text 60,124,LIVES$
  539. End Proc
  540. Procedure HS_LOAD
  541.    ' -------------Load Hi Score ------------- 
  542.    If Exist("Rat.Scores") Then Open In 1,"Rat.Scores" Else Pop Proc
  543.    For L=1 To 15
  544.       For I=1 To 7
  545.          Input #1,HS$(L,I)
  546.       Next I
  547.    Next L
  548.    Close 1
  549.    Proc HS_TABLE
  550. End Proc
  551. Procedure HS_TABLE
  552.    ' --------- Display Hi Score on Hi Score Table-------------  
  553.    Screen 4 : Set Font F0
  554.    Cls 8,33,63 To 628,216
  555.    Gr Writing 0
  556.    Ink 2 : Paper 8
  557.    For L=1 To 14
  558.       Text 48,L*11+60,HS$(L,1)
  559.       Text 210,L*11+60,HS$(L,2)
  560.       Text 292,L*11+60,HS$(L,4)
  561.       Text 363,L*11+60,HS$(L,3)
  562.       Text 398,L*11+60,HS$(L,7)
  563.       Text 462,L*11+60,HS$(L,5)
  564.       Text 549,L*11+60,HS$(L,6)
  565.    Next L
  566. End Proc
  567. Procedure HI_SCORE
  568.    '------- HI Score Display -------- 
  569.    Screen 0 : Set Font F2 : Ink 2,0
  570.    If HISCORE<SCORE(1) Then HISCORE=SCORE(1)
  571.    If HISCORE<SCORE(2) Then HISCORE=SCORE(2)
  572.    If Val(HS$(1,2))>HISCORE Then HISCORE=Val(HS$(1,2))
  573.    HISCORE$=Str$(HISCORE)
  574.    R=Len(HISCORE$)
  575.    HISCORE$="00000000000"+Right$(HISCORE$,R-1)
  576.    Text 249,48,Right$(HISCORE$,11)
  577. End Proc
  578. Procedure CAPS_NAME[NAMEWORK$]
  579.    ' ----- Capitalise Names Proc by ?????????????????? ---------
  580.    '*** Format name - namely uppercases/lowercases name properly
  581.    NAMEWORK$=Upper$(Left$(NAMEWORK$,1))+Lower$(Mid$(NAMEWORK$,2))
  582.    M=Instr(NAMEWORK$,"/")
  583.    If M<>0
  584.       NAMEWORK$=Left$(NAMEWORK$,M)+Upper$(Mid$(NAMEWORK$,M+1,1))+Mid$(NAMEWORK$,M+2)
  585.    End If 
  586.    M=-1
  587.    Repeat 
  588.       M=Instr(NAMEWORK$," ",M+1)
  589.       If M<>0
  590.          NAMEWORK$=Left$(NAMEWORK$,M)+Upper$(Mid$(NAMEWORK$,M+1,1))+Mid$(NAMEWORK$,M+2)
  591.       End If 
  592.    Until M=0
  593.    M=-1
  594.    Repeat 
  595.       M=Instr(NAMEWORK$,"-",M+1)
  596.       If M<>0
  597.          NAMEWORK$=Left$(NAMEWORK$,M)+Upper$(Mid$(NAMEWORK$,M+1,1))+Mid$(NAMEWORK$,M+2)
  598.       End If 
  599.    Until M=0
  600. End Proc[NAMEWORK$]
  601. Procedure MAP_DISPLAY
  602.    ' ------ Display Maze on Main Screen-------
  603.    X1=BX(1)-64 : Y1=BY(1)-66 : X2=BX(1)+64 : Y2=BY(1)+65
  604.    For I=141 To 0 Step -1
  605.       Screen Swap 0 : Wait Vbl 
  606.       Screen Copy 2,X1+I,Y1,X2,Y2 To 0,106+I,7
  607.    Next I
  608.    Screen Swap 0
  609. End Proc
  610. Procedure TIME_DISPLAY
  611.    '------ Time Bar ----- 
  612.    Screen 1
  613.    If TIME<0 or TIME>57 Then Pop Proc
  614.    If TIME>53 Then Ink 3 Else Ink 4
  615.    Bar 286,68-TIME To 294,68
  616. End Proc
  617. Procedure CH_DATA
  618.    ' -------------------- Outline current players score ------------------
  619.    Screen 0 : For L=0 To 1
  620.       If PN=1 Then Ink 3 : Box 243,76 To 310,95 : Ink 0 : Box 243,115 To 310,134
  621.       If PN=2 Then Ink 3 : Box 243,115 To 310,134 : Ink 0 : Box 243,76 To 310,95
  622.    Next L
  623.    ' -------------------- Put cheese on to the maze ----------------------  
  624.    Screen 1 : Ink 0 : Cls 0,216,10 To 255,69
  625.    For L=1 To CHEESE(PN)
  626.       If CHMX(PN,L)>0 and CHMY(PN,L)>0
  627.          C=10 : If L=1 : C=11 : End If 
  628.          Wait 6
  629.          Screen 1 : Plot 216+(CHMX(PN,L)/15),11+(CHMY(PN,L)/15),11
  630.          Screen 2 : Bob L+10,CHMX(PN,L),CHMY(PN,L),C
  631.       End If 
  632.    Next L
  633. End Proc
  634. Procedure SETUP_START
  635.    '--------------- Read Bob Start Positions ---------------
  636.    Screen 2 : I=0
  637.    LD$="Maze/maze"+Right$(Str$(MAZE(PN)),1)+".rats"
  638.    Open In 1,LD$
  639.    Repeat 
  640.       For L=1 To 9
  641.          Input #1,A,B
  642.          BX(L)=A : BY(L)=B : D(L)=1
  643.       Next L
  644.       Inc I
  645.    Until I=RATS(PN)
  646.    Close 1
  647. End Proc
  648. Procedure MAKE_HARDER
  649.    ' --- Inc Number of Cheese - Rat Start Pos - Number of rats - Maze --
  650.    If CHEESE(PN)>14 Then CHEESE(PN)=6 : Inc RATS(PN)
  651.    If RATS>3 Then RATS=1 : Inc DIF(PN)
  652.    If DIF(PN)>6 Then DIF(PN)=4 : Inc MAZE(PN) : Proc MAZE_LOAD[MAZE(PN)]
  653.    If MAZE(PN)>4 Then MAZE(PN)=1 : DIF(PN)=CHEESE(PN)+MAZE(PN)
  654.    Proc MAZE_LOAD[MAZE(PN)]
  655. End Proc
  656. Procedure JSTICK
  657.    '---------- Read Joystick ----------   
  658.    If Jup(1) Then T(1)=1 : Pop Proc
  659.    If Jdown(1) Then T(1)=3 : Pop Proc
  660.    If Jright(1) Then T(1)=2 : Pop Proc
  661.    If Jleft(1) Then T(1)=4 : Pop Proc
  662.    T(1)=0
  663. End Proc
  664. Procedure HIT_CHEESE
  665.    ' --------- Mouse Hits Cheese -------------
  666.    If Col(11) : SB=200 : Screen 1 : Gr Writing 1 : Set Font F4 : Ink 0,8
  667.       Text 85,37,"2" : Gr Writing 0 : Ink 4 : Text 84,36,"2" : Screen 2
  668.    End If 
  669.    Screen 2 : For I=1 To CHEESE(PN)
  670.       If Col(I+10)
  671.          Screen 1 : Plot 216+(CHMX(PN,I)/15),11+(CHMY(PN,I)/15),0
  672.          SCORE(PN)=SCORE(PN)+(SB*BONUS(PN)) : CHMX(PN,I)=0 : CHMY(PN,I)=0
  673.          Inc BONUS(PN) : Inc EATEN(PN) : Sam Play 10 : Bob Off(I+10)
  674.          Proc STATUS : Screen 1 : Set Font F4
  675.          Gr Writing 1 : Ink 0,8 : Text 70,60,Str$(SB*BONUS(PN))
  676.          Gr Writing 0 : Ink 11 : Text 69,59,Str$(SB*BONUS(PN))
  677.       End If 
  678.    Next I
  679.    ' -------- Mouse hit Rat ------------------
  680.    For I=2 To DIF(PN)
  681.       If Col(I) Then D(1)=9 : Exit 
  682.    Next I
  683.    Proc SCORE_DISPLAY
  684.    Screen 2
  685. End Proc
  686. Procedure WIND
  687.    ' -------- Delay rats ---------------
  688.    If W>30 Then W=25
  689.    Inc TIME : Proc TIME_DISPLAY : Screen 2
  690.    On D(1) Gosub D1,D2,D3,D4
  691.    Bob W,(X Bob(1)+SX),(Y Bob(1)+SY),12 : S1(W)=0
  692.    Inc W
  693.    Pop Proc
  694.    D1:
  695.    SX=0 : SY=15 : Return 
  696.    D2:
  697.    SX=-15 : SY=0 : Return 
  698.    D3:
  699.    SX=0 : SY=-15 : Return 
  700.    D4:
  701.    SX=15 : SY=0 : Return 
  702. End Proc
  703. Procedure EXTRA_LIVE
  704.    ' -------- Inc Lives ------------
  705.    If XL(PN)=0 and SCORE(PN)>10000 Then Inc LIVES(PN) : XL(PN)=1 : Pop Proc
  706.    If XL(PN)=1 and SCORE(PN)>40000 Then Inc LIVES(PN) : XL(PN)=2 : Pop Proc
  707.    If XL(PN)=2 and SCORE(PN)>80000 Then Inc LIVES(PN) : XL(PN)=3 : Pop Proc
  708.    If XL(PN)=3 and SCORE(PN)>12000 Then Inc LIVES(PN) : XL(PN)=4 : Pop Proc
  709.    If XL(PN)=4 and SCORE(PN)>160000 Then Inc LIVES(PN) : XL(PN)=5 : Pop Proc
  710.    If XL(PN)=5 and SCORE(PN)>200000 Then Inc LIVES(PN) : XL(PN)=6 : Pop Proc
  711.    If XL(PN)=6 and SCORE(PN)>OLD_SCORE(PN)+200000 Then Inc LIVES(PN) : OLD_SCORE(PN)=SCORE(PN)
  712. End Proc
  713. Procedure HS_SAVE
  714.    ' -------- Save HiScores --------- 
  715.    Open Out 1,"Rat.Scores"
  716.    For L=1 To 15
  717.       For I=1 To 7
  718.          Print #1,HS$(L,I);",";
  719.       Next I
  720.    Next L
  721.    Print #1,Chr$(13)
  722.    Close 1
  723. End Proc
  724. Procedure HIT_RAT[L]
  725.    ' --------- Rat hit wind ------
  726.    For I=0 To 9
  727.       If Col(I+25) Then On D(L) Gosub R1,R2,R3,R4
  728.    Next I
  729.    Pop Proc
  730.    R1: D(L)=3 : Return 
  731.    R2: D(L)=4 : Return 
  732.    R3: D(L)=1 : Return 
  733.    R4: D(L)=2 : Return 
  734. End Proc
  735. Procedure SCORE_DISPLAY
  736.    '------- Score Display ---------   
  737.    Screen 0 : Set Font F2
  738.    SCORE$=Str$(SCORE(PN))
  739.    L=Len(SCORE$)
  740.    SCORE$="000000000000"+Right$(SCORE$,L-1)
  741.    If PN=2 Then POS=39 : Ink 1 Else POS=0 : Ink 4
  742.    Text 249,88+POS,Right$(SCORE$,11)
  743. End Proc
  744. Procedure PAUSE
  745.    ' -------- Wait --------   
  746.    Proc INFO_DATA[9,1]
  747.    Repeat 
  748.    Until Fire(1)
  749. End Proc
  750. Procedure QUITING
  751.    Proc INFO_DATA[8,1]
  752.    Wait 20
  753.    Do 
  754.       K$=Inkey$
  755.       If K$="y" or K$="Y" Then _HIDE_SCREENS : Run "RadarRatRun.AMOS"
  756.       If K$="n" or K$="N" Then Assign "fonts:" To "sys:fonts" : Erase All : Wait 10 : End 
  757.    Loop 
  758.    Proc _HIDE_SCREENS
  759. End Proc
  760. Procedure THEEND
  761.    LEVEL$(PN)=Str$(LEVEL(PN))
  762.    Inc ST
  763.    Sam Play 2 : HST_UP
  764.    If SCORE(PN)<Val(HS$(15,2)) Then Goto JUMP
  765.    For L=15 To 1 Step -1
  766.       If SCORE(PN)>Val(HS$(L,2)) Then For I=1 To 7 : HS$(L+1,I)=HS$(L,I) : Next I
  767.       If SCORE(PN)<Val(HS$(L-1,2)) or L=1 Then HSP=L : Exit 
  768.    Next L
  769.    HSP=L
  770.    HS$(HSP,1)=""
  771.    HS$(HSP,2)=Str$(SCORE(PN))
  772.    HS$(HSP,3)=LEVEL$(PN)
  773.    HS$(HSP,4)=Str$(TC(PN))
  774.    Proc _DATE$ : HS$(HSP,6)=Param$
  775.    Proc _TIME$ : HS$(HSP,5)=Param$
  776.    TS(PN)=TAKEN(PN)/50
  777.    TM(PN)=TS(PN)/60 : TS(PN)=TS(PN)-(TM(PN)*60)
  778.    HS$(HSP,7)=Str$(TM(PN))+":"+Right$(Str$(TS(PN)),2)
  779.    Proc HS_TABLE : NAME_INPUT
  780.    JUMP:
  781.    HS_TABLE
  782.    Wait 20
  783.    Proc HS_SAVE : HST_DOWN : Inc PN : If PN>2 Then PN=1
  784.    If LIVES(PN)=-2 Then Inc PN : If PN>2 Then PN=1
  785.    If ST<PLY Then MAZE_LOAD[MAZE(PN)] : Pop Proc
  786.    Proc QUITING
  787. End Proc
  788. Procedure SETUP_CHEESE
  789.    '----------------- Put CHEESE in an array -------------- 
  790.    Screen 2
  791.    For L=1 To CHEESE(PN)
  792.       AGAIN:
  793.       X1=Rnd(550)+25 : CHMX(PN,L)=X1
  794.       Y1=Rnd(850)+25 : CHMY(PN,L)=Y1
  795.       Z=Zone(CHMX(PN,L),CHMY(PN,L))
  796.       If Z Then Goto AGAIN
  797.    Next L
  798. End Proc
  799. Procedure MAZE_LOAD[NUMBER]
  800.    '------------------------- Load Maze ------------------------
  801.    Proc INFO_DATA[6,0]
  802.    MAZE=NUMBER
  803.    LM$="Maze/maze"+Right$(Str$(MAZE),1)+".iff"
  804.    If Exist(LM$) Then MAZE=MAZE Else MAZE=1
  805.    LM$="Maze/maze"+Right$(Str$(MAZE),1)+".iff"
  806.    Load Iff LM$,2
  807.    '------------------------- Load Zone data -------------------
  808.    A=0 : B=0 : C=0 : C=0
  809.    Screen Hide 2 : Reserve Zone 
  810.    LMD$="Maze/Maze"+Right$(Str$(MAZE),1)+".data"
  811.    Open In 1,LMD$
  812.    Input #1,A
  813.    Reserve Zone A
  814.    For L=1 To A : Input #1,A,B,C,D
  815.       Set Zone L,A,B To C,D
  816.    Next L
  817.    Close 1
  818. End Proc
  819. Procedure HST_UP
  820.    Screen To Front 4
  821.    If SC1Y>SC0Y Then I1=SC1Y Else I1=SC0Y
  822.    For I=SC4Y To SC4Y-218 Step -1
  823.       Screen Display 4,SCX,I,,
  824.       View 
  825.       Wait Vbl 
  826.    Next I
  827. End Proc
  828. Procedure HST_DOWN
  829.    If SC1Y>SC0Y Then I1=SC1Y Else I1=SC0Y
  830.    For I=SC4Y-219 To SC4Y
  831.       Screen Display 4,SCX,I,,
  832.       View 
  833.       Wait Vbl 
  834.    Next I
  835.    Screen To Back 4
  836. End Proc
  837. Procedure NAME_INPUT
  838.    Gr Writing 0
  839.    Set Font 0
  840.    N$=Str$(PN)
  841.    Ink 0 : Text 80,44,"Please enter your name player"+N$
  842.    P=HSP*11+53
  843.    A$=A$+"BU 1,10,10,20,10,0,0,32;"
  844.    A$=A$+"[IN BPos 4+,0,0;][]"
  845.    A$=A$+"ED 2,1,1,17,18,'',8,4;"
  846.    A$=A$+"EXit;"
  847.    Dialog Open 1,A$
  848.    R=Dialog Run(1,,47,P)
  849.    Repeat 
  850.       D=Dialog(1)
  851.    Until D>1
  852.    HS$(HSP,1)=Rdialog$(1,2)
  853.    Dialog Close 
  854.    Ink 11 : Bar 73,38 To 433,46
  855.    Proc CAPS_NAME[HS$(HSP,1)]
  856.    HS$(HSP,1)=Param$
  857. End Proc
  858. Procedure RESET_TIME
  859.    '--------- TIME DISPLAY ---------- 
  860.    Screen 1
  861.    Ink 14
  862.    Bar 286,11 To 294,68
  863. End Proc
  864. Procedure _START
  865.    Bob Clear 
  866.    For L=1 To DIF(PN)
  867.       If L>1 Then D(L)=4 : C=14 Else D(L)=1 : C=13
  868.       Screen 1 : Bob L+30,216+(BX(L)/15),11+(BY(L)/15),C
  869.       Screen 2 : Bob L,BX(L),BY(L),D(L)
  870.    Next L
  871.    Proc CH_DATA
  872.    Screen 2 : Bob Draw 
  873.    Proc MAP_DISPLAY
  874.    Proc INFO_DATA[5,1]
  875.    Repeat 
  876.       K$=Inkey$ : If K$<>"" Then Proc KEYS
  877.    Until Fire(1)
  878.    INFO_DATA[7,0]
  879. Track Stop 
  880.    Sam Play 1 : Wait 40
  881.    For L=8 To 4 Step -1 : Sam Play L : Wait 40 : Next L
  882.    DUMMY=Free
  883. End Proc
  884. Procedure VERSION
  885.    Screen 0 : Ink 0,13
  886.    Gr Writing 1
  887.    Set Font F3
  888.    Text 256,18,"V 2.51"
  889.    Gr Writing 0
  890.    Ink 11 : Text 255,17,"V 2.51"
  891. End Proc
  892. Procedure _DATE$
  893.    '
  894.    ' Call DOS DateStamp function
  895.    T$=Space$(12)
  896.    Dreg(1)=Varptr(T$)
  897.    RIEN=Doscall(-192)
  898.    NJ=Leek(Varptr(T$))
  899.    '
  900.    ' Find this year's first day 
  901.    A=1978 : JOUR=7
  902.    Do 
  903.       BIS=0 : If(A and 3)=0 : BIS=1 : End If 
  904.       Exit If NJ-365-BIS<0
  905.       Add JOUR,1+BIS : If JOUR>7 : Add JOUR,-7 : End If 
  906.       Add NJ,-365-BIS
  907.       Inc A
  908.    Loop 
  909.    '
  910.    ' Find month 
  911.    M=1
  912.    Do 
  913.       Read N
  914.       Exit If NJ-N<0
  915.       Add NJ,-N : Inc M
  916.    Loop 
  917.    Inc NJ
  918.    '
  919.    ' Create the string
  920.    J$=Mid$(Str$(NJ),2) : If Len(J$)<2 : J$="0"+J$ : End If 
  921.    M$=Mid$(Str$(M),2) : If Len(M$)<2 : M$="0"+M$ : End If 
  922.    A$=Mid$(Str$(A),2)
  923.    DATE$=J$+"-"+M$+"-"+A$
  924.    '
  925.    ' Length of each month 
  926.    Data 31,28+BIS,31,30,31,30,31,31,30,31,30,31
  927.    '
  928. End Proc[DATE$]
  929. Procedure _TIME$
  930.    '
  931.    ' Call DOS function
  932.    T$=Space$(12)
  933.    Dreg(1)=Varptr(T$)
  934.    RIEN=Doscall(-192)
  935.    MN=Leek(Varptr(T$)+4)
  936.    SEC=Leek(Varptr(T$)+8)
  937.    '
  938.    ' Minutes calculation
  939.    H=MN/60 : H$=Mid$(Str$(H),2) : If Len(H$)<2 : H$="0"+H$ : End If 
  940.    M=MN mod 60 : M$=Mid$(Str$(M),2) : If Len(M$)<2 : M$="0"+M$ : End If 
  941.    '
  942.    ' Seconds calculation  
  943.    S=SEC/50 : S$=Mid$(Str$(S),2) : If Len(S$)<2 : S$="0"+S$ : End If 
  944.    '
  945.    ' Final string 
  946.    TIME$=H$+":"+M$+":"+S$
  947.    '
  948. End Proc[TIME$]
  949. Procedure KEYS
  950.    
  951.    If Key State(76) : Inc SPEED : If SPEED>5 : Dec SPEED : End If 
  952.       Screen 1 : Ink 2,0
  953.       Gr Writing 1
  954.       A$=Str$(SPEED-1)
  955.       Set Font F2
  956.       Text 158,64,A$
  957.       Screen 2
  958.       Pop Proc
  959.    End If 
  960.    
  961.    If Key State(77) : Dec SPEED : If SPEED<1 : Inc SPEED : End If 
  962.       Screen 1 : Ink 2,0
  963.       Gr Writing 1
  964.       A$=Str$(SPEED-1)
  965.       Set Font F2
  966.       Text 158,64,A$
  967.       Screen 2
  968.       Pop Proc
  969.    End If 
  970.    
  971.    If Key State(69) Then Proc QUITING
  972.    
  973.    If Key State(37) : Proc HST_UP
  974.       Screen 4 : Ink 0 : Text 80,44,"Please Press Any Key To Continue"
  975.       Wait Key : HST_DOWN : Pop Proc
  976.    End If 
  977.    
  978.    If Key State(23) : Proc SCR_POS : Inc P
  979.       If P>1 : P=0 : End If 
  980.       Pop Proc
  981.    End If 
  982.    
  983.    If Key State(64) Then Proc PAUSE : DELAY=0
  984.    Proc INFO_DATA[7,0]
  985.    Gr Writing 1 : Ink 0,8 : Text 70,60,Str$(SB*BONUS(PN))
  986.    Gr Writing 0 : Ink 11 : Text 69,59,Str$(SB*BONUS(PN))
  987.    If SB=200 : Gr Writing 1 : Set Font F4
  988.       Ink 0,8 : Text 85,37,"2" : Gr Writing 0
  989.       Ink 4 : Text 84,36,"2"
  990.    End If 
  991. End Proc
  992. Procedure _MUSIC
  993. Load "Screens/ThreeBlindMice.abk"
  994. Led Off 
  995. Track Loop On 
  996. End Proc